在C(和其他语言可能)单个|
或是&
按位比较.
双重||
或是&&
逻辑比较.
编辑:请务必阅读下面关于"没有短路"的Mehrdad评论
在实践中,由于true
通常等同于1
并且false
通常等效0
,因此按位比较有时可以是有效的并且返回完全相同的结果.
曾经有一个关键任务软件组件,我运行了一个静态代码分析器,它指出在逻辑比较应该使用的位比较.由于它是用C语言编写的,并且由于逻辑比较的安排,因此软件可以正常工作.例:
if ( (altitide > 10000) & (knots > 100) ) ...
在C#(强类型语言)中使用| 和&on布尔变量将导致"逻辑或/和无w/o短路". (22认同)
C#行为的一个例子是"if((o!= null)&(o.Property == 1))"将抛出NullReferenceException,因为即使o为null,它仍会尝试计算o.Property的值."if((o!= null)&&(o.Property == 1))"不会抛出异常,因为如果o == null,它将不会尝试评估o.Property. (9认同)
Richard Dunl.. 29
&和| 是按位运算符,可以对整数和布尔参数以及&&和||进行操作 是逻辑运算符,只能在布尔参数上运行.在许多语言中,如果两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&&的情况下,如果第一个参数参数是假的,第二个参数是无关紧要的).
在C(和其他语言可能)单个|
或是&
按位比较.
双重||
或是&&
逻辑比较.
编辑:请务必阅读下面关于"没有短路"的Mehrdad评论
在实践中,由于true
通常等同于1
并且false
通常等效0
,因此按位比较有时可以是有效的并且返回完全相同的结果.
曾经有一个关键任务软件组件,我运行了一个静态代码分析器,它指出在逻辑比较应该使用的位比较.由于它是用C语言编写的,并且由于逻辑比较的安排,因此软件可以正常工作.例:
if ( (altitide > 10000) & (knots > 100) ) ...
&和| 是按位运算符,可以对整数和布尔参数以及&&和||进行操作 是逻辑运算符,只能在布尔参数上运行.在许多语言中,如果两个参数都是布尔值,则关键区别在于逻辑运算符将执行短路评估,如果第一个参数足以确定答案,则不评估第二个参数(例如,在&&的情况下,如果第一个参数参数是假的,第二个参数是无关紧要的).
&和| 是||的二元运算符 和&&是布尔值.
差异很大:
(1&2)为0,false
(1 && 2)为真